package com.jccfc;

import com.jccfc.iMessage.IMessage;
import com.jccfc.iMessageFactory.ParentMessageFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @version 目前针对 配置了apollo且含有application.yml的项目使用
 * @Auther: qym
 * @Date: 2020/12/28 13:38
 * @Description: 用于获取消息发送的Message对象
 */
public final class MessgeFactory {

    //日志打印
    private static Logger logger = LoggerFactory.getLogger(MessgeFactory.class);

    //私有化构造器
    private MessgeFactory() {
    }

    /**
     * @Auther: qym
     * @Description: 获取Imessage方法
     * @Param: 消息发送具体实现类
     * @Return: 消息发送体message
     * @Date: 2020/12/28 14:03
     */
    public static IMessage getMessage(Class<?> clazz) {
        ParentMessageFactory parentMessageFactory = null;
        try {
            //判断是否是有效的工厂类型
            if (ParentMessageFactory.class.isAssignableFrom(clazz)) {
                parentMessageFactory = (ParentMessageFactory) clazz.newInstance();
            } else {
                logger.error("创建工厂实例时,传入的工厂类型不正确,不存在该工厂:{}", clazz);
                return null;
            }
        } catch (Exception e) {
            logger.error("创建工厂实例时出错:{}", e);
            return null;
        }
        return parentMessageFactory.getMessage();
    }

}
